// INT_MIN
// #include <limits.h>
#include "find_val.h"
#include "get_default_attr.h"

std::string find_val(const std::string& line_cur, const std::string& ntc){
	// ntc为time、scenario时单独处理
	std::string val_str;
	if(ntc.substr(0,4)!="time" && ntc.substr(0.8)!="scenario"){
		// 返回INT_MIN，则代表没找到
		size_t pos=0;
		pos=line_cur.find(ntc);
		// 认为字段结束后，第一个数字到第一个非数字之前1位的范围是需要的数值
        if(pos==std::string::npos){
			return "find_val error";
		}
		size_t beg=pos;
		beg+=ntc.size();
		// beg向后挪
		for(beg; beg<line_cur.size(); beg++){
			char ch_cur=line_cur[beg];
			if('0'<=ch_cur && ch_cur<='9'){
				break;
			}
			else{
				continue;
			}
		}
		if(beg>=line_cur.size()){
			return "find_val error";
		}
		// end向后挪
		size_t end=beg;
		for(end; end<=line_cur.size(); end++){
			char ch_cur=line_cur[end];
			if('0'<=ch_cur && ch_cur<='9'){
				continue;
			}
			else{
				break;
			}
		}
		// 不用判断end是否越界，end一定指向最后一位数字的后面一位
		// 最后判断下前面是否有负号（对于用`-`连接字段和数值的日志太傻逼了，很容易误解考虑此情况）
		if(line_cur[beg-1]=='-'){
			beg--;
		}
		size_t len=end-beg;
		val_str=line_cur.substr(beg, len);
	}
	// 处理ntc=="scenario"的情况
	else if(ntc.substr(0,8)=="scenario"){
		val_str=get_scenario(line_cur);
	}
	// 处理ntc=="time"
	else if(ntc.substr(0,4)=="time"){
		/** 
		 * 写到此处发现：时间为string类型，其他是数字
		 * 为了方便&保持一致，可以将其他数字改成string类型
		 */
		val_str=get_time(line_cur);
	}
	return val_str;

}
